# Remove rows with missing values
debt_data <- na.omit(debt_data)
# Define the sample period, excluding specific quarters
data_sample <- unique(debt_data$Date)
data_sample <- data_sample[!data_sample %in% c("2008Q4", "2009Q1", "2009Q2", "2009Q3",
"2009Q4", "2020Q1", "2020Q2", "2020Q3",
"2020Q4", "2021Q1", "2021Q2", "2021Q3",
"2021Q4", "2022Q1", "2022Q2", "2022Q3",
"2022Q4", "2023Q1")]
# Estimate panel model for inflation shock
panel_inf <- lp_lin_panel(data_set = debt_data,
data_sample = data_sample,
endog_data = "PORT2GDP",
cumul_mult = FALSE,
shock = "INF_SHK_S",
diff_shock = FALSE,
panel_model = "within",
panel_effect = "individual",
robust_cov = "vcovSCC",
c_exog_data = colnames(debt_data)[c(3, 4, 5, 7, 8)],
l_exog_data = colnames(debt_data)[c(3, 4, 5, 7, 8)],
lags_exog_data = 1,
confint = 1.65,
hor = 4)
# Plot the results for inflation shock
plot(panel_inf)
# Check the number of unique cross-sectional and time identifiers
set <- panel_inf$xy_data_sets[[1]]
length(unique(set$cross_id))
length(unique(set$date_id))
# Estimate panel model for real shock
panel_real <- lp_lin_panel(data_set = debt_data,
data_sample = data_sample,
endog_data = "PORT2GDP",
cumul_mult = FALSE,
shock = "REAL_SHK_S",
diff_shock = FALSE,
panel_model = "within",
panel_effect = "individual",
robust_cov = "vcovSCC",
c_exog_data = colnames(debt_data)[c(3, 4, 5, 7, 8)],
l_exog_data = colnames(debt_data)[c(3, 4, 5, 7, 8)],
lags_exog_data = 1,
confint = 1.65,
hor = 4)
# Plot the results for real shock
plot(panel_real)
# Estimate panel model for reaction shock
panel_react <- lp_lin_panel(data_set = debt_data,
data_sample = data_sample,
endog_data = "PORT2GDP",
cumul_mult = FALSE,
shock = "REACT_SHK_S",
diff_shock = FALSE,
panel_model = "within",
panel_effect = "individual",
robust_cov = "vcovSCC",
c_exog_data = colnames(debt_data)[c(3, 4, 5, 7, 8)],
l_exog_data = colnames(debt_data)[c(3, 4, 5, 7, 8)],
lags_exog_data = 1,
confint = 1.65,
hor = 4)
# Plot the results for reaction shock
plot(panel_react)
# Combine and scale the impulse response functions (IRFs) for each shock
inf <- cbind(panel_inf$irf_panel_low[1,], panel_inf$irf_panel_mean[1,], panel_inf$irf_panel_up[1,]) / 4
real <- cbind(panel_real$irf_panel_low[1,], panel_real$irf_panel_mean[1,], panel_real$irf_panel_up[1,]) / 4
react <- cbind(panel_react$irf_panel_low[1,], panel_react$irf_panel_mean[1,], panel_react$irf_panel_up[1,]) / 4
View(panel_inf)
View(panel_inf)
View(debt_data)
View(debt_data)
View(main_data)
View(main_data)
View(set)
View(real)
View(inf)
View(panel_inf)
View(real)
View(set)
View(real)
View(react)
# Clear all data and graphics
rm(list = ls()) # Clear all data
graphics.off() # Clear all graphs
#install.packages('lpirfs')
#install.packages('arsenal')
# Load necessary libraries
library(lpirfs)
library(readxl)
library(dplyr)
library(reshape2)
library(arsenal)
# Set working directory
setwd("//WBNTPCIFS/Data/Franz/US_MP_SpilloverWP/Paper/JMCB final/JMCB 22-481 replication/EMDE_Spillovers/")
# Load the main dataset
main_data <- read.csv("main_database_JMCB.csv", na = "NA", stringsAsFactors = FALSE)
# Choose the variable to focus on and create a new variable PORT2GDP
debt_data <- main_data %>%
mutate(PORT2GDP = CF2GDP_TL - FDI2GDP) %>%
dplyr::select(iso3c, Date, GDP, CPI, REER, PORT2GDP, D_DEBT2GDP, D_POLICY, REAL_SHK_S, INF_SHK_S, REACT_SHK_S)
# Remove rows with missing values
debt_data <- na.omit(debt_data)
# Define the sample period, excluding specific quarters
data_sample <- unique(debt_data$Date)
data_sample <- data_sample[!data_sample %in% c("2008Q4", "2009Q1", "2009Q2", "2009Q3",
"2009Q4", "2020Q1", "2020Q2", "2020Q3",
"2020Q4", "2021Q1", "2021Q2", "2021Q3",
"2021Q4", "2022Q1", "2022Q2", "2022Q3",
"2022Q4", "2023Q1")]
# Estimate panel model for inflation shock
panel_inf <- lp_lin_panel(data_set = debt_data,
data_sample = data_sample,
endog_data = "PORT2GDP",
cumul_mult = FALSE,
shock = "INF_SHK_S",
diff_shock = FALSE,
panel_model = "within",
panel_effect = "individual",
robust_cov = "vcovSCC",
c_exog_data = colnames(debt_data)[c(3, 4, 5, 7, 8)],
l_exog_data = colnames(debt_data)[c(3, 4, 5, 7, 8)],
lags_exog_data = 1,
confint = 1.65,
hor = 4)
# Plot the results for inflation shock
plot(panel_inf)
# Check the number of unique cross-sectional and time identifiers
set <- panel_inf$xy_data_sets[[1]]
length(unique(set$cross_id))
length(unique(set$date_id))
# Estimate panel model for real shock
panel_real <- lp_lin_panel(data_set = debt_data,
data_sample = data_sample,
endog_data = "PORT2GDP",
cumul_mult = FALSE,
shock = "REAL_SHK_S",
diff_shock = FALSE,
panel_model = "within",
panel_effect = "individual",
robust_cov = "vcovSCC",
c_exog_data = colnames(debt_data)[c(3, 4, 5, 7, 8)],
l_exog_data = colnames(debt_data)[c(3, 4, 5, 7, 8)],
lags_exog_data = 1,
confint = 1.65,
hor = 4)
# Plot the results for real shock
plot(panel_real)
# Estimate panel model for reaction shock
panel_react <- lp_lin_panel(data_set = debt_data,
data_sample = data_sample,
endog_data = "PORT2GDP",
cumul_mult = FALSE,
shock = "REACT_SHK_S",
diff_shock = FALSE,
panel_model = "within",
panel_effect = "individual",
robust_cov = "vcovSCC",
c_exog_data = colnames(debt_data)[c(3, 4, 5, 7, 8)],
l_exog_data = colnames(debt_data)[c(3, 4, 5, 7, 8)],
lags_exog_data = 1,
confint = 1.65,
hor = 4)
# Plot the results for reaction shock
plot(panel_react)
# Combine and scale the impulse response functions (IRFs) for each shock
inf <- cbind(panel_inf$irf_panel_low[1,], panel_inf$irf_panel_mean[1,], panel_inf$irf_panel_up[1,]) / 4
real <- cbind(panel_real$irf_panel_low[1,], panel_real$irf_panel_mean[1,], panel_real$irf_panel_up[1,]) / 4
react <- cbind(panel_react$irf_panel_low[1,], panel_react$irf_panel_mean[1,], panel_react$irf_panel_up[1,]) / 4
# Clear Workspace and Graphics
rm(list = ls()) # Clear all data
graphics.off() # Clear all graphs
# Load necessary libraries
library(plm)
library(lpirfs)
library(readxl)
library(dplyr)
# Set working directory
setwd("//WBNTPCIFS/Data/Franz/US_MP_SpilloverWP/Paper/JMCB final/JMCB 22-481 replication/EMDE_Spillovers/")
# Load the main dataset
main_data <- read.csv("main_database_JMCB.csv", na = "NA", stringsAsFactors = FALSE)
# Choose the variable to focus on and create a new variable PORT2GDP
debt_data <- main_data %>%
mutate(PORT2GDP = CF2GDP_TL - FDI2GDP) %>%
dplyr::select(iso3c, Date, GDP, CPI, REER, PORT2GDP, D_DEBT2GDP, D_POLICY, REAL_SHK_S, INF_SHK_S, REACT_SHK_S)
# Remove rows with missing values
debt_data <- na.omit(debt_data)
# Define the sample period, excluding specific quarters
data_sample <- unique(debt_data$Date)
data_sample <- data_sample[!data_sample %in% c("2008Q4", "2009Q1", "2009Q2", "2009Q3",
"2009Q4", "2020Q1", "2020Q2", "2020Q3",
"2020Q4", "2021Q1", "2021Q2", "2021Q3",
"2021Q4", "2022Q1", "2022Q2", "2022Q3",
"2022Q4", "2023Q1")]
# Estimate panel model for inflation shock
panel_inf <- lp_lin_panel(data_set = debt_data,
data_sample = data_sample,
endog_data = "CPI",
cumul_mult = FALSE,
shock = "INF_SHK_S",
diff_shock = FALSE,
panel_model = "within",
